package cl.ccs.migracionbcmc.dao.impl;


import cl.ccs.migracionbcmc.connection.ConnectionFactory;
import cl.ccs.migracionbcmc.dao.PortalClientesDao;
import cl.ccs.migracionbcmc.model.Client;
import cl.ccs.migracionbcmc.model.Mensaje;
import cl.ccs.migracionbcmc.util.Constantes;
import cl.ccs.migracionbcmc.util.StringUtil;

import cl.ccs.migracionbcmc.util.Util;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.sql.Types;

import java.text.SimpleDateFormat;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;


public class PortalClientesDaoImpl implements PortalClientesDao {
    public PortalClientesDaoImpl() {
        super();
    }
    
    @Override
    public Mensaje inscripcionClientes(String rut, Date birthDate, String gender, Integer civilStatus,
                                       String names, String firstLastName, String secondLastName,
                                       Integer educationalLevel, String streetAddress, Integer commune, String city,
                                       String phone, String mobilePhone, String activity, String email, String usuario,
                                       Integer ccosto){
        Mensaje mensaje = new Mensaje();
        Connection con = null;
        CallableStatement st = null;

        try {
            con = getConnectionBic();
            st =
    con.prepareCall("{? = call SI_InscripcionCliente_ADF " + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}");
            st.registerOutParameter(1, Types.INTEGER);
            st.setString(2, rut);
            st.setString(3, firstLastName);
            st.setString(4, secondLastName);
            st.setString(5, names);
            st.setTimestamp(6, new Timestamp(birthDate.getTime()));
            st.setString(7, gender);
            st.setInt(8, civilStatus);
            st.setInt(9, educationalLevel);
            st.setString(10, streetAddress);
            st.setInt(11, commune);
            st.setString(12, city);
            st.setString(13, StringUtil.defaultString(phone)); /* Prevent null */
            st.setString(14, mobilePhone);
            st.setString(15, activity);
            st.setString(16, email);
            st.setInt(17, Constantes.INSCRIPTION_TYPE_WEBPAGE);
            st.setString(18, usuario);
            st.setInt(19, ccosto);

            st.registerOutParameter(20, Types.NUMERIC); /* Correlative Client */
            st.registerOutParameter(21, Types.VARCHAR); /* Password */
            st.registerOutParameter(22, Types.TINYINT); /* Result */
            st.registerOutParameter(23, Types.VARCHAR); /* Message */

            st.execute();
            mensaje.setCodigoMensaje(st.getInt(22)); /* Save errorlevel */
            
            
            if (mensaje.getCodigoMensaje() != 0) {
                mensaje.setMensaje(st.getString(23));
                
            }else{
                mensaje.setMensaje(st.getString(23) + ";" + st.getLong(20) + ";" + st.getString(21));
            }
            
        } catch (Exception e) {
            mensaje.setCodigoMensaje(-999);
            mensaje.setMensaje(e.getMessage());
            e.printStackTrace();
        } finally {
           
            ConnectionFactory.freeConnection(con, st);
        }

        return mensaje;
    }

    private Connection getConnectionBic() throws Exception {
        return ConnectionFactory.getConnectionSybaseBIC();
    }

    @Override
    public Client buscaNombreCliente(String rut) {
        Client cliente = new Client();
        Connection con = null;
        CallableStatement st = null;
        Mensaje mensaje = new Mensaje();
        
        try {
            con = getConnectionBic();
            st =
        con.prepareCall("{? = call SQ_NombreCliente_ADF " + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}");
            st.registerOutParameter(1, Types.INTEGER);
            st.setString(2, rut);
            st.registerOutParameter(3, Types.CHAR);
            st.registerOutParameter(4, Types.CHAR);
            st.registerOutParameter(5, Types.CHAR);
            st.registerOutParameter(6, Types.TINYINT);
            st.registerOutParameter(7, Types.VARCHAR);
            st.registerOutParameter(8, Types.DATE);
            st.registerOutParameter(9, Types.NUMERIC);
            st.registerOutParameter(10, Types.TINYINT);
            st.registerOutParameter(11, Types.VARCHAR);
            
            st.execute();
            
            cliente.setFirstLastName(st.getString(3)==null? "":st.getString(3));
            cliente.setSecondLastName(st.getString(4)==null? "":st.getString(4));
            cliente.setNames(st.getString(5)==null? "":st.getString(5));
            cliente.setCodEstado(st.getInt(6));
            cliente.setGlosaEstado(st.getString(7)==null? "":st.getString(7));
            cliente.setFecInscripcion(st.getDate(8));
            cliente.setNroCliente(st.getLong(9));
            
            mensaje.setCodigoMensaje(st.getInt(10));
            mensaje.setMensaje(st.getString(11)==null? "":st.getString(11));
            
            cliente.setMensaje(mensaje); 
           
                      
        } catch (Exception e) {
            mensaje.setCodigoMensaje(-999);
            mensaje.setMensaje(e.getMessage());
            e.printStackTrace();
        } finally {
            
            ConnectionFactory.freeConnection(con, st);
        }

        return cliente;
    }

    @Override
    public Mensaje generaClave(Long nroCliente, Integer ccosto, String usuarioModif) {
        Mensaje mensaje = new Mensaje();
        Connection con = null;
        CallableStatement st = null;

        try {
            con = getConnectionBic();
            st =
        con.prepareCall("{? = call SU_GenerarClave_ADF " + "(?, ?, ?, ?, ?, ?)}");
            st.registerOutParameter(1, Types.INTEGER);
            st.setLong(2, nroCliente);
            st.setString(3, usuarioModif);
            st.setInt(4, ccosto);
            
            st.registerOutParameter(5, Types.VARCHAR); /*Clave */
            st.registerOutParameter(6, Types.TINYINT); /* Result */
            st.registerOutParameter(7, Types.VARCHAR); /* Message */

            st.execute();
            mensaje.setCodigoMensaje(st.getInt(6)); /* Save errorlevel */
            
            if (mensaje.getCodigoMensaje() != 0) {
                mensaje.setMensaje(st.getString(7));
            }else{
                mensaje.setMensaje(st.getString(5));
            }

        } catch (Exception e) {
            mensaje.setCodigoMensaje(-999);
            mensaje.setMensaje(e.getMessage());
            e.printStackTrace();
        } finally {
            
            ConnectionFactory.freeConnection(con, st);
        }

        return mensaje;
    }


    @Override
    public Client obtenerDatosCliente(Long nroCliente) {
        Mensaje mensaje = new Mensaje();
        Client cliente = new Client();
        Connection con = null;
        CallableStatement st = null;
        
        if (nroCliente == null){
            return null;
        }
            

        try {
            con = getConnectionBic();
            st =
        con.prepareCall("{? = call SQ_DetalleCliente_ADF " + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}");
            st.registerOutParameter(1, Types.INTEGER);
            st.setLong(2, nroCliente);
            
            st.registerOutParameter(3, Types.VARCHAR); /*Rut */
            st.registerOutParameter(4, Types.VARCHAR); /*apPat */
            st.registerOutParameter(5, Types.VARCHAR); /*apMat */
            st.registerOutParameter(6, Types.VARCHAR); /*Nombres */
            st.registerOutParameter(7, Types.DATE); /*FecNacimiento*/
            st.registerOutParameter(8, Types.VARCHAR); /*Sexo */
            st.registerOutParameter(9, Types.VARCHAR); /*Glosa Sexo */
            st.registerOutParameter(10, Types.TINYINT); /*EstadoCivil */
            st.registerOutParameter(11, Types.VARCHAR); /*Glosa Estado Civil */
            st.registerOutParameter(12, Types.TINYINT); /*Nivel Educacional */
            st.registerOutParameter(13, Types.VARCHAR); /*Glosa Nivel Educacional */
            st.registerOutParameter(14, Types.VARCHAR); /*Direccion */
            st.registerOutParameter(15, Types.TINYINT); /*CodRegion */
            st.registerOutParameter(16, Types.SMALLINT); /*CodComuna */
            st.registerOutParameter(17, Types.VARCHAR); /*GlosaComuna */
            st.registerOutParameter(18, Types.VARCHAR); /*Ciudad*/
            st.registerOutParameter(19, Types.VARCHAR); /*FonoFijo */
            st.registerOutParameter(20, Types.VARCHAR); /*FonoMovil */
            st.registerOutParameter(21, Types.VARCHAR); /*Giro */
            st.registerOutParameter(22, Types.VARCHAR); /*Email */
            st.registerOutParameter(23, Types.TINYINT); /* cod Estado*/
            st.registerOutParameter(24, Types.VARCHAR); /*GlosaEstado */
            st.registerOutParameter(25, Types.DATE); /*Fecha Estado */
            st.registerOutParameter(26, Types.VARCHAR); /*Causal Blq Anulacion */
            st.registerOutParameter(27, Types.DATE); /*Fec Inscripcion*/
            st.registerOutParameter(28, Types.VARCHAR); /*Glosa Tipo Inscripcion */
            st.registerOutParameter(29, Types.VARCHAR); /*Usuario Inscripcion */
            st.registerOutParameter(30, Types.VARCHAR); /*CCosto */
            st.registerOutParameter(31, Types.DATE); /*Fecha Ingreso */
            st.registerOutParameter(32, Types.DATE); /*Fecha Cambio Clave */
            st.registerOutParameter(33, Types.DATE); /*Fecha Gen Clave */
            st.registerOutParameter(34, Types.VARCHAR); /*Usuario Gen Clave */
            st.registerOutParameter(35, Types.DATE); /*Fecha Recuperacion Clave */
            st.registerOutParameter(36, Types.VARCHAR); /*Usuario Rec Clave */
            st.registerOutParameter(37, Types.DATE); /*Fec Modificacion */
            st.registerOutParameter(38, Types.VARCHAR); /*Usuario Modificacion */
            st.registerOutParameter(39, Types.TINYINT); /*Terminos y condiciones */
            st.registerOutParameter(40, Types.VARCHAR); /*IP*/
            
            st.registerOutParameter(41, Types.TINYINT); /* Result */
            st.registerOutParameter(42, Types.VARCHAR); /* Message */

            st.execute();
            mensaje.setCodigoMensaje(st.getInt(41)); /* Save errorlevel */
            
            cliente.setRut(st.getString(3));
            cliente.setFirstLastName(st.getString(4));
            cliente.setSecondLastName(st.getString(5));
            cliente.setNames(st.getString(6));
            cliente.setBirthDate(st.getDate(7));
            cliente.setGender(st.getString(8));
            cliente.setCivilStatus(st.getInt(10));
            cliente.setGlosaEstadoCivil(st.getString(11));
            cliente.setEducationalLevel(st.getInt(12));
            cliente.setGlosaNivelEducacional(st.getString(13));
            cliente.setStreetAddress(st.getString(14));
            cliente.setRegion(st.getInt(15));
            cliente.setCommune(st.getInt(16));
            cliente.setGlosaComuna(st.getString(17));
            cliente.setCity(st.getString(18));
            cliente.setPhone(st.getString(19));
            cliente.setMobilePhone(st.getString(20));
            cliente.setActivity(st.getString(21));
            cliente.setEmail(st.getString(22));
            cliente.setCodEstado(st.getInt(23));
            cliente.setGlosaEstado(st.getString(24));    
            cliente.setFecEstado(st.getDate(25)); /*Fecha Estado */
            cliente.setCausalBlqAnulacion(st.getString(26)); /*Causal Blq Anulacion */
            cliente.setFecInscripcion(st.getDate(27)); /*Fec Inscripcion*/
            cliente.setTipoInscripcion(st.getString(28)); /*Glosa Tipo Inscripcion */
            cliente.setUsuarioInscripcion(st.getString(29)); /*Usuario Inscripcion */
            cliente.setGlosaCCosto(st.getString(30)); /*CCosto */
            cliente.setFecIngreso(st.getDate(31)); /*Fecha Ingreso */
            cliente.setFecCambioClave(st.getDate(32)); /*Fecha Cambio Clave */
            cliente.setFecGenClave(st.getDate(33)); /*Fecha Gen Clave */
            cliente.setUsuarioGenClave(st.getString(34)); /*Usuario Gen Clave */
            cliente.setFecRecuperacionClave(st.getDate(35)); /*Fecha Recuperacion Clave */
            cliente.setUsuarioRecuperacionClave(st.getString(36)); /*Usuario Rec Clave */
            cliente.setFecModificacion(st.getDate(37)); /*Fec Modificacion */
            cliente.setUsuarioModificacion(st.getString(38)); /*Usuario Modificacion */
            
            if (mensaje.getCodigoMensaje() != 0) {
                mensaje.setMensaje(st.getString(42));
            }
            cliente.setMensaje(mensaje);

        } catch (Exception e) {
            mensaje.setCodigoMensaje(-999);
            mensaje.setMensaje(e.getMessage());
            e.printStackTrace();
        } finally {
            
            ConnectionFactory.freeConnection(con, st);
        }

        return cliente;
    }

    @Override
    public List<Client> buscaClientes(String rut, Date fecDesde, Date fecHasta, Long nroCliente,
                                      Integer codEstado) {
        
        Connection con = null;
        ResultSet rs = null;
        List<Client> listClientes = new ArrayList<Client>();
        if ((rut == null) && (fecDesde == null) && (fecDesde == null) && (nroCliente==null)) {
            
            return Collections.emptyList();
        }        
       
        try {
            con = ConnectionFactory.getConnectionSybaseBIC();
            CallableStatement stm = con.prepareCall("{?=CALL SQ_BuscarCliente_ADF(?, ?, ?, ?, ?, ?, ?)}");
            stm.registerOutParameter(1, Types.INTEGER);
            stm.setString(2, rut==null? "000000000-0":Util.formatRUT(rut));
            stm.setLong(3,nroCliente==null?0:nroCliente);
            stm.setTimestamp(4, fecDesde==null?null:new Timestamp(fecDesde.getTime()));
            stm.setTimestamp(5,fecHasta==null?null:new Timestamp(fecHasta.getTime()));
            stm.setInt(6, codEstado==null?0:codEstado);
            stm.registerOutParameter(7, Types.TINYINT);
            stm.registerOutParameter(8, Types.VARCHAR);
            
            if (!stm.execute()) {
                
                return Collections.emptyList();
            }
            rs = stm.executeQuery();
                              
            while (rs.next()) {
                Client cliente = new Client();
                
                cliente.setNroCliente(rs.getLong("Fld_CorrCliente_Id"));
                cliente.setRut(rs.getString("Fld_RutCliente"));
                cliente.setNames(rs.getString("Fld_Nombre"));
                cliente.setFecInscripcion(rs.getDate("Fld_FecInscripcion"));
                cliente.setFecEstado(rs.getDate("Fld_FecEstado"));
                cliente.setCodEstado(rs.getInt("Fld_CodEstado"));
                cliente.setGlosaEstado(rs.getString("Fld_GlosaEstado"));
                
                listClientes.add(cliente);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ConnectionFactory.freeConnection(con, rs);
        }
        return listClientes;
    }

    @Override
    public Mensaje modificaDatosCliente(Long nroCliente, String rut, String names, String firstLastName,
                                        String secondLastName, Date birthDate, String gender, Integer civilStatus,
                                        Integer educationalLevel, String streetAddress, Integer commune, String city,
                                        String phone, String mobilePhone, String activity, String email,
                                        String usuarioMod, String causalBlqAnul) {
        Mensaje mensaje = new Mensaje();
        Connection con = null;
        CallableStatement st = null;

        System.out.println("Fecha Nac " + birthDate);
        System.out.println("glosa causall " + causalBlqAnul);
        try {
            con = getConnectionBic();
            st =
        con.prepareCall("{? = call SU_ModCliente_ADF " + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}");
            st.registerOutParameter(1, Types.INTEGER);
            st.setLong(2, nroCliente);
            st.setString(3, rut);
            st.setString(4, firstLastName);
            st.setString(5, secondLastName);
            st.setString(6, names);
            st.setTimestamp(7, new Timestamp(birthDate.getTime()));
            st.setString(8, gender);
            st.setInt(9, civilStatus);
            st.setInt(10, educationalLevel);
            st.setString(11, streetAddress);
            st.setInt(12, commune);
            st.setString(13, city);
            st.setString(14, StringUtil.defaultString(phone)); /* Prevent null */
            st.setString(15, mobilePhone);
            st.setString(16, activity);
            st.setString(17, email);
            st.setString(18, usuarioMod);
            st.setString(19, causalBlqAnul);
            
            st.registerOutParameter(20, Types.TINYINT); /* Result */
            st.registerOutParameter(21, Types.VARCHAR); /* Message */

            st.execute();
            mensaje.setCodigoMensaje(st.getInt(20)); /* Save errorlevel */
            
            
            if (mensaje.getCodigoMensaje() != 0) {
                mensaje.setMensaje(st.getString(21));
            }
            
        } catch (Exception e) {
            mensaje.setCodigoMensaje(-999);
            mensaje.setMensaje(e.getMessage());
            e.printStackTrace();
        } finally {
           
            ConnectionFactory.freeConnection(con, st);
        }

        return mensaje;
    }

    @Override
    public Mensaje bloqueaDesBlqCliente(Long nroCliente, String causalBlqAnul, String usuarioModif) {
        Mensaje mensaje = new Mensaje();
        Connection con = null;
        CallableStatement st = null;
        
        try {
            con = getConnectionBic();
            st =
        con.prepareCall("{? = call SU_BlqDblqCliente_ADF " + "(?, ?, ?, ?, ?)}");
            st.registerOutParameter(1, Types.INTEGER);
            st.setLong(2, nroCliente);
            st.setString(3, causalBlqAnul);
            st.setString(4, usuarioModif);
            
            st.registerOutParameter(5, Types.TINYINT); /* Result */
            st.registerOutParameter(6, Types.VARCHAR); /* Message */

            st.execute();
            mensaje.setCodigoMensaje(st.getInt(5)); /* Save errorlevel */
            
            
            if (mensaje.getCodigoMensaje() != 0) {
                mensaje.setMensaje(st.getString(6));
            }
            
        } catch (Exception e) {
            mensaje.setCodigoMensaje(-999);
            mensaje.setMensaje(e.getMessage());
            e.printStackTrace();
        } finally {
           
            ConnectionFactory.freeConnection(con, st);
        }

        return mensaje;
    }

    @Override
    public Mensaje anulaCliente(Long nroCliente, String causalBlqAnul, String usuarioModif) {
        Mensaje mensaje = new Mensaje();
        Connection con = null;
        CallableStatement st = null;
        
        try {
            con = getConnectionBic();
            st =
        con.prepareCall("{? = call SU_AnularCliente_ADF " + "(?, ?, ?, ?, ?)}");
            st.registerOutParameter(1, Types.INTEGER);
            st.setLong(2, nroCliente);
            st.setString(3, causalBlqAnul);
            st.setString(4, usuarioModif);
            
            st.registerOutParameter(5, Types.TINYINT); /* Result */
            st.registerOutParameter(6, Types.VARCHAR); /* Message */

            st.execute();
            mensaje.setCodigoMensaje(st.getInt(5)); /* Save errorlevel */
            
            
            if (mensaje.getCodigoMensaje() != 0) {
                mensaje.setMensaje(st.getString(6));
            }
            
        } catch (Exception e) {
            mensaje.setCodigoMensaje(-999);
            mensaje.setMensaje(e.getMessage());
            e.printStackTrace();
        } finally {
           
            ConnectionFactory.freeConnection(con, st);
        }

        return mensaje;     
    }

    @Override
    public Client recuperarClave(Long nroCliente, String usuarioModif) {
        Mensaje mensaje = new Mensaje();
        Client cliente = new Client();
        Connection con = null;
        CallableStatement st = null;

        try {
            con = getConnectionBic();
            st =
        con.prepareCall("{? = call SP_RecuperarClaveCliente_ADF " + "(?, ?, ?, ?, ?, ?, ?)}");
            st.registerOutParameter(1, Types.INTEGER);
            st.setLong(2, nroCliente);
            st.setString(3, usuarioModif);
            
            st.registerOutParameter(4, Types.VARCHAR); /*nombre */
            st.registerOutParameter(5, Types.VARCHAR); /*clave */
            st.registerOutParameter(6, Types.VARCHAR); /*email */
                       
            st.registerOutParameter(7, Types.TINYINT); /* Result */
            st.registerOutParameter(8, Types.VARCHAR); /* Message */

            st.execute();
            mensaje.setCodigoMensaje(st.getInt(7)); /* Save errorlevel */
            
            cliente.setNames(st.getString(4));
            cliente.setClave(st.getString(5));
            cliente.setEmail(st.getString(6));            
                                  
            if (mensaje.getCodigoMensaje() != 0) {
                mensaje.setMensaje(st.getString(8));
            }
            cliente.setMensaje(mensaje);

        } catch (Exception e) {
            mensaje.setCodigoMensaje(-999);
            mensaje.setMensaje(e.getMessage());
            e.printStackTrace();
        } finally {
            
            ConnectionFactory.freeConnection(con, st);
        }

        return cliente;
    }

    @Override
    public Mensaje validarCliente(Long nroCliente, String usuarioModif) {
        Mensaje mensaje = new Mensaje();
        Connection con = null;
        CallableStatement st = null;

        try {
            con = getConnectionBic();
            st =
        con.prepareCall("{? = call SU_ValidarCliente_ADF " + "(?, ?, ?, ?, ?)}");
            st.registerOutParameter(1, Types.INTEGER);
            st.setLong(2, nroCliente);
            st.setString(3, usuarioModif);
                        
            st.registerOutParameter(4, Types.VARCHAR); /*Clave */
            st.registerOutParameter(5, Types.TINYINT); /* Result */
            st.registerOutParameter(6, Types.VARCHAR); /* Message */

            st.execute();
            mensaje.setCodigoMensaje(st.getInt(5)); /* Save errorlevel */
            
            if (mensaje.getCodigoMensaje() != 0) {
                mensaje.setMensaje(st.getString(6));
            }else{
                mensaje.setMensaje(st.getString(4));
            }

        } catch (Exception e) {
            mensaje.setCodigoMensaje(-999);
            mensaje.setMensaje(e.getMessage());
            e.printStackTrace();
        } finally {
            
            ConnectionFactory.freeConnection(con, st);
        }

        return mensaje;
    }

    @Override
    public List<Client> infClavesEntregadas(Date fecDesde, Date fecHasta, String usuario) {
        Connection con = null;
        ResultSet rs = null;
        SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");                      
        List<Client> listClientes = new ArrayList<Client>();
        if ((fecDesde == null) && (fecHasta == null)) {
            
            return Collections.emptyList();
        }        
               
        try {
            con = ConnectionFactory.getConnectionSybaseBIC();
            CallableStatement stm = con.prepareCall("{?=CALL SQ_InfClavesEntregadasAyS_ADF(?, ?, ?, ?, ?)}");
            stm.registerOutParameter(1, Types.INTEGER);
            stm.setTimestamp(2, fecDesde==null?null:new Timestamp(fecDesde.getTime()));
            stm.setTimestamp(3,fecHasta==null?null:new Timestamp(fecHasta.getTime()));
            stm.setString(4, usuario);
            stm.registerOutParameter(5, Types.TINYINT);
            stm.registerOutParameter(6, Types.VARCHAR);
            
            rs = stm.executeQuery();
                              
            while (rs.next()) {
            
                Client cliente = new Client();
             
                cliente.setRut(rs.getString("Fld_RutCliente"));
                cliente.setNames(rs.getString("Fld_Nombre"));
                cliente.setFecInscripcion(rs.getDate("Fld_FecInscripcion"));
                cliente.setFecModificacion(formatoFecha.format(rs.getDate("Fld_FecModificacion")).equals("01/01/1900")? null : rs.getDate("Fld_FecModificacion"));
                cliente.setUsuarioModificacion(rs.getString("Fld_UsuarioModificacion"));
                cliente.setGlosaEstado(rs.getString("Fld_GlosaEstado"));
                             
                listClientes.add(cliente);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ConnectionFactory.freeConnection(con, rs);
        }
        
        
        return listClientes;
    }

    @Override
    public List<Client> detalleTransDiarias(Date fecDesde, Date fecHasta, Integer ccosto) {
        Connection con = null;
        ResultSet rs = null;
        SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");                      
        List<Client> listClientes = new ArrayList<Client>();
        if ((fecDesde == null) && (fecHasta == null)) {
            
            return Collections.emptyList();
        }        
        
        try {
            con = ConnectionFactory.getConnectionSybaseBIC();
            CallableStatement stm = con.prepareCall("{?=CALL SQ_DetalleTransDiarias_ADF(?, ?, ?, ?, ?)}");
            stm.registerOutParameter(1, Types.INTEGER);
            stm.setTimestamp(2, fecDesde==null?null:new Timestamp(fecDesde.getTime()));
            stm.setTimestamp(3,fecHasta==null?null:new Timestamp(fecHasta.getTime()));
            stm.setInt(4, ccosto);
            stm.registerOutParameter(5, Types.TINYINT);
            stm.registerOutParameter(6, Types.VARCHAR);
                        
            rs = stm.executeQuery();
                              
            while (rs.next()) {
                Client cliente = new Client();
              
                cliente.setGlosaCCosto(rs.getString("Fld_GlosaCCosto"));
                cliente.setUsuarioInscripcion(rs.getString("Fld_UsuarioInscripcion"));
                cliente.setRut(rs.getString("Fld_RutCliente"));
                cliente.setFecInscripcion(rs.getDate("Fld_FecInscripcion"));
                cliente.setFecModificacion(formatoFecha.format(rs.getDate("Fld_FecModificacion")).equals("01/01/1900")? null : rs.getDate("Fld_FecModificacion"));
                cliente.setUsuarioModificacion(rs.getString("Fld_UsuarioModificacion"));
                cliente.setGlosaEstado(rs.getString("Fld_GlosaEstado"));
                
                listClientes.add(cliente);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ConnectionFactory.freeConnection(con, rs);
        }
        return listClientes;
    }

    @Override
    public List<Client> resumenTransDiarias(Date fecDesde, Date fecHasta, Integer ccosto) {
        Connection con = null;
        ResultSet rs = null;
        SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");          
        List<Client> listClientes = new ArrayList<Client>();
        if ((fecDesde == null) && (fecHasta == null)) {
            
            return Collections.emptyList();
        }        
        
        try {
            con = ConnectionFactory.getConnectionSybaseBIC();
            CallableStatement stm = con.prepareCall("{?=CALL SQ_ResumenTransDiarias_ADF(?, ?, ?, ?, ?)}");
            stm.registerOutParameter(1, Types.INTEGER);
            stm.setTimestamp(2, fecDesde==null?null:new Timestamp(fecDesde.getTime()));
            stm.setTimestamp(3,fecHasta==null?null:new Timestamp(fecHasta.getTime()));
            stm.setInt(4, ccosto);
            stm.registerOutParameter(5, Types.TINYINT);
            stm.registerOutParameter(6, Types.VARCHAR);
                        
            rs = stm.executeQuery();
                              
            while (rs.next()) {
                Client cliente = new Client();
              
                cliente.setGlosaCCosto(rs.getString("Fld_GlosaCCosto"));
                cliente.setUsuarioInscripcion(rs.getString("Fld_UsuarioInscripcion"));
                cliente.setCantidadRut(rs.getInt("Fld_Cantidad"));
                cliente.setFecInscripcion(formatoFecha.parse(rs.getString("Fld_Fecha")));
                cliente.setGlosaEstado(rs.getString("Fld_GlosaEstado"));
                
                listClientes.add(cliente);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ConnectionFactory.freeConnection(con, rs);
        }
        return listClientes;
    }
}
